﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Diagnostics;
using System.Xml.Xsl;
using System.IO;
using System.Xml.XPath;
using System.Xml.Schema;

namespace Rsa
{
    class GestorConfigXML
    {
        public const int CONFIGURACAO = 1;
        public const int CONFIG_EMENTA = 2;
        public const string CONFIG_FILE = "config.xml";
        public const string XSD_FILE = "config.xsd";
        private static bool _isvalid = true;
        private static string _errmsg;

        private XmlDocument doc;

        public GestorConfigXML()
        {
            doc = new XmlDocument();
            this.carregaXML();
        }

        private bool carregaXML()
        {
            this.checkFileExists(CONFIG_FILE);
            this.doc.Load(CONFIG_FILE);
            return true;
        }

        private void checkFileExists(string ficheiro){

            if (File.Exists(ficheiro))
            {
                Debug.WriteLine("file exists");
                return;
            }
            else
            {
                this.criarFicheiro(CONFIG_FILE);
            }
        }

        private void criarFicheiro(string ficheiro){

            this.doc = new XmlDocument();

            try
            {

                doc.Schemas.Add(null, XSD_FILE);
                doc.Load(CONFIG_FILE);

                ValidationEventHandler eh = new ValidationEventHandler(validationEventHandler);

                doc.Validate(eh);
                Console.WriteLine("Documento bem Formatado");
                if (_isvalid)
                {
                    Console.WriteLine("Documento Valido");

                }
                else
                {
                    Console.WriteLine("Documento Inválido" + _errmsg);
                }
            }
            catch (XmlException e)
            {
              // DEU BODE
                Console.WriteLine("Documento mal Formado");
            }

            doc.Save(CONFIG_FILE);

        }

        static void validationEventHandler(Object Sender, ValidationEventArgs x)
        {
            _isvalid = false;
            _errmsg = x.Message;


        }

        public string getEmentaURL()
        {
            string res = null;
            XmlNodeList nl = doc.SelectNodes("/config/ementa/url");
            foreach (XmlNode n in nl)
            {
                //Debug.WriteLine(n.InnerXml);
                res = n.InnerXml;
            }
            return res;
        }
    }


}
